home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / 68hc11 / smallc11.arc / CC42.C < prev    next >
Text File  |  1988-07-01  |  4KB  |  239 lines

  1. /********************************************************
  2. *    placed in SCCS file    Oct 29 86    Jrd    *
  3. *    File = cc42.c                    *
  4. ********************************************************/
  5.  
  6. /*** add primary and secondary registers (result in primary)*/
  7. add() {
  8. ol("pshx");
  9. ol("tsx");
  10. ol("addd 0,x");
  11. ol("pulx");
  12. }
  13.  
  14. /*** subtract primary from secondary register (result in primary)*/
  15. sub() {
  16. ol("xgdx");
  17. ol("pshx");     ol("tsx");
  18. ol("subd 0,x");
  19. ol("pulx");
  20. }
  21.  
  22. /*** multiply primary and secondary registers (result in primary)*/
  23. mult() {call("ccmult");}
  24.  
  25. /*
  26. ** divide secondary by primary register
  27. ** (quotient in primary, remainder in secondary)
  28. */
  29. div()
  30. {
  31.  
  32. ol("xgdx");
  33. ol("idiv");
  34. ol("xgdx");
  35. }
  36.  
  37. /*** remainder of secondary/primary
  38. ** (remainder in primary, quotient in secondary)*/
  39. mod() {div();swap();}
  40.  
  41. /*
  42. ** inclusive "or" primary and secondary registers
  43. ** (result in primary)
  44. */
  45. or()
  46. {
  47. call("ccor");
  48. }
  49.  
  50. /*** exclusive "or" the primary and secondary registers
  51. ** (result in primary) */
  52. xor() {
  53. call("ccxor");
  54. }
  55.  
  56. /*
  57. ** "and" primary and secondary registers
  58. ** (result in primary)
  59. */
  60. and() {call("ccand");}
  61.  
  62. /*
  63. ** logical negation of primary register
  64. */
  65. lneg() {
  66. ol("coma"); ol("comb");
  67. }
  68.  
  69. /*
  70. ** arithmetic shift right secondary register
  71. ** number of bits given in primary register
  72. ** (result in primary)
  73. */
  74. asr() {call("ccasr");}
  75.  
  76. /*
  77. ** arithmetic shift left secondary register
  78. ** number of bits given in primary register
  79. ** (result in primary)
  80. */
  81. asl() {call("ccasl");}
  82.  
  83. /*
  84. ** two's complement primary register
  85. */
  86. neg() {
  87. ol("coma"); ol("comb");
  88. ol("addd #1");
  89. }
  90.  
  91. /*
  92. ** one's complement primary register
  93. */
  94. com() {
  95. ol("coma"); ol("comb");
  96. }
  97.  
  98. /*
  99. ** increment primary register by one object of whatever size
  100. */
  101. inc(n) int n; {
  102.   while(1) {
  103.     ol("addd #1");
  104.     if(--n < 1) break;
  105.     }
  106.   }
  107.  
  108. /*
  109. ** decrement primary register by one object of whatever size
  110. */
  111. dec(n) int n; {
  112.   while(1) {
  113.     ol("subd #1");
  114.     if(--n < 1) break;
  115.     }
  116.   }
  117.  
  118. /*** test for equal to*/
  119. eq()  {call("cceq");}
  120.  
  121. /*** test for equal to zero*/
  122. eq0(label) int label; {
  123.   ol("cmpd #0");
  124.   ol("beq *+5");
  125.   ot("jmp ");
  126.   printlabel(label);
  127.   nl();
  128.   }
  129.  
  130. /*** test for not equal to*/
  131. ne()  {call("ccne");}
  132.  
  133. /*** test for not equal to zero*/
  134. ne0(label) int label; {
  135. ol("cpd #0");
  136. ol("bne *+5");
  137. ot("jmp ");
  138. printlabel(label);
  139. nl();
  140. }
  141.  
  142. /*
  143. ** test for less than (signed)
  144. */
  145. lt()  {call("cclt");}
  146.  
  147. /*
  148. ** test for less than to zero
  149. */
  150. lt0(label) int label; {
  151. ol("cpd #0");
  152. ol("blt *+5");
  153. ot("jmp ");
  154. printlabel(label);
  155. nl();
  156.   }
  157.  
  158. /*
  159. ** test for less than or equal to (signed)
  160. */
  161. le()  {call("ccle");}
  162.  
  163. /*
  164. ** test for less than or equal to zero
  165. */
  166. le0(label) int label; {
  167. ol("cpd #0");
  168. ol("beq *+7");
  169. ol("bmi *+5");
  170. ot("jmp ");
  171. printlabel(label);
  172. nl();
  173.   }
  174.  
  175. /*
  176. ** test for greater than (signed)
  177. */
  178. gt()  {call("ccgt");}
  179.  
  180. /*
  181. ** test for greater than to zero
  182. */
  183. gt0(label) int label; {
  184. ol("cpd #0");
  185. ol("bne *+5");
  186. ot("jmp ");
  187. printlabel(label);
  188. nl();
  189. ol("bpl *+5");
  190. ot("jmp ");
  191. printlabel(label);
  192. nl();
  193. }
  194.  
  195. /*
  196. ** test for greater than or equal to (signed)
  197. */
  198. ge()  {call("ccge");}
  199.  
  200. /*
  201. ** test for gteater than or equal to zero
  202. */
  203. ge0(label) int label; {
  204. ol("cpd #0");
  205. ol("bpl *+5");
  206. ot("jmp ");
  207. printlabel(label);
  208. nl();
  209.   }
  210.  
  211. /*
  212. ** test for less than (unsigned)
  213. */
  214. ult()  {call("ccult");}
  215.  
  216. /*
  217. ** test for less than to zero (unsigned)
  218. */
  219. ult0(label) int label; {
  220.   ot("jmp ");
  221.   printlabel(label);
  222.   nl();
  223.   }
  224.  
  225. /*
  226. ** test for less than or equal to (unsigned)
  227. */
  228. ule()  {call("ccule");}
  229.  
  230. /*
  231. ** test for greater than (unsigned)
  232. */
  233. ugt()  {call("ccugt");}
  234.  
  235. /*
  236. ** test for greater than or equal to (unsigned)
  237. */
  238. uge()  {call("ccuge");}
  239.